/**
 * 观察任务的类型
 */
export type ObserveTaskType = 'remoteHarvest' | 'sign' | 'dpHarvest'

/**
 * 观察对象
 */
export type ObserveTask = {
    /**
     * 该任务的名字
     */
    name: string
    /**
     * 任务类型
     */
    type: ObserveTaskType
    /**
     * 要观察的房间名
     */
    roomNames: string[]
    /**
     * 已观察的房间
     */
    observedRooms?: string[]
    /**
     * 将要观察的房间索引
     */
    roomIndex: number
    /**
     * 绑定的 scout
     */
    scouts: string[]
    /**
     * 超时时间，超过这个时间还没有 scout 到位则放弃
     */
    timeout?: number
    /**
     * 该任务是否已经完成
     */
    done?: boolean
    /**
     * 额外数据
     */
    data?: any
}

/**
 * 到达房间后执行的回调函数，next 用于切换到下一个房间
 */
export type ObserveTaskCallback = (creep: Creep, task: ObserveTask, next: () => boolean) => void

/**
 * 观察任务管理器 memory
 */
export interface ObserveMemory {
    /**
     * 观察任务列表
     */
    tasks: ObserveTask[]
}

declare global {
    interface RoomMemory {
        observe: ObserveMemory
    }
}
